package co.com.smart.persistence.entity;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import co.com.smart.persistence.entity.dto.SmartPersona;
import co.com.smart.persistence.entity.util.AbstractFacade;

/**
 * Session Bean implementation class PaisFacade
 */
@Stateless(
		name		= "PersonaFacade", 
		mappedName 	= "ejb/PersonaFacade")
public class PersonaFacade extends AbstractFacade<SmartPersona> implements PersonaFacadeLocal{
	@PersistenceContext(unitName = "SmartServicesPU")
	private EntityManager em;
    /**
     * Default constructor. 
     */
    public PersonaFacade() {
    	super(SmartPersona.class);
    }

	@Override
	protected EntityManager getEntityManager() {
		return em;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<SmartPersona> consultarAllPersona(SmartPersona entity) {
		StringBuilder  sQuery = new StringBuilder("select c from SmartPersona c  ");
		sQuery.append(" where c.smfhretiro is null ");
		
		if (entity.getSmartDatosMaestroSexo()  != null && entity.getSmartDatosMaestroSexo().getSmscdatmestro() != null) {
			sQuery.append(" and c.smartDatosMaestroSexo = :sm_scsexo ");			
		}	
		
		if (entity.getSmartDatosMaestroTipoIdentificacion()  != null && entity.getSmartDatosMaestroTipoIdentificacion().getSmscdatmestro() != null) {
			sQuery.append(" and c.smartDatosMaestroTipoIdentificacion = :sm_sctipoidentificacion ");			
		}	

		if(entity.getSmcousuario() != null && !"".equals(entity.getSmcousuario().trim())){
			sQuery.append(" and c.smcousuario = :sm_cousuario ");
		}
		
		if(entity.getSmdsidentificacion() != null && !"".equals(entity.getSmdsidentificacion().trim())){
			sQuery.append(" and c.smdsidentificacion like :sm_dsidentificacion ");
		}
		
		if(entity.getSmdspnombre() != null && !"".equals(entity.getSmdspnombre().trim())){
			sQuery.append(" and c.smdspnombre like :sm_dspnombre ");
		}
		
		if(entity.getSmdspapellido() != null && !"".equals(entity.getSmdspapellido().trim())){
			sQuery.append(" and c.smdspapellido like :sm_dspapellido ");
		}
		
		if(entity.getSmdsdireccion() != null && !"".equals(entity.getSmdsdireccion().trim())){
			sQuery.append(" and c.smdsdireccion like :sm_dsdireccion ");
		}
		
		if(entity.getSmdstelefono() != null && !"".equals(entity.getSmdstelefono().trim())){
			sQuery.append(" and c.smdstelefono like :sm_dstelefono1 ");
		}
		
		if(entity.getSmdscelular()!= null && !"".equals(entity.getSmdscelular().trim())){
			sQuery.append(" and c.smdscelular = :sm_dscelular ");
		}
		
		if(entity.getSmdsemail()!= null && !"".equals(entity.getSmdsemail().trim())){
			sQuery.append(" and c.smdsemail = :sm_dsemail ");
		}
		
		if(entity.getSmdsprofesion()!= null && !"".equals(entity.getSmdsprofesion().trim())){
			sQuery.append(" and c.smdsprofesion = :sm_dsprofesion ");
		}
		
		if(entity.getSmdsempresatrabaja()!= null && !"".equals(entity.getSmdsempresatrabaja().trim())){
			sQuery.append(" and c.smdsempresatrabaja like :sm_dsempresatrabaja ");
		}
		
		if(entity.getSmdsbarrio()!= null && !"".equals(entity.getSmdsbarrio().trim())){
			sQuery.append(" and c.smdsbarrio like :sm_dsbarrio ");
		}
		
		Query query = em.createQuery(sQuery.toString() );
		
		if (entity.getSmartDatosMaestroSexo()  != null && entity.getSmartDatosMaestroSexo().getSmscdatmestro() != null) {
			query.setParameter("sm_scsexo", entity.getSmartDatosMaestroSexo());	
		}
		
		if (entity.getSmartDatosMaestroTipoIdentificacion()  != null && entity.getSmartDatosMaestroTipoIdentificacion().getSmscdatmestro() != null) {
			query.setParameter("sm_sctipoidentificacion", entity.getSmartDatosMaestroTipoIdentificacion());	
		}
		
		if(entity.getSmcousuario() != null && !"".equals(entity.getSmcousuario().trim())) {
			query.setParameter("sm_cousuario", entity.getSmcousuario().trim());
		}
		
		if(entity.getSmdsidentificacion() != null && !"".equals(entity.getSmdsidentificacion().trim())){
			query.setParameter("sm_dsidentificacion", "%"+entity.getSmdsidentificacion().trim()+"%");
		}
		
		if(entity.getSmdspnombre() != null && !"".equals(entity.getSmdspnombre().trim())){
			query.setParameter("sm_dspnombre", entity.getSmdspnombre().trim());
		}
		
		if(entity.getSmdspapellido() != null && !"".equals(entity.getSmdspapellido().trim())){
			query.setParameter("sm_dspapellido", entity.getSmdspapellido().trim());
		}
		
		if(entity.getSmdsdireccion() != null && !"".equals(entity.getSmdsdireccion().trim())){
			query.setParameter("sm_dsdireccion", entity.getSmdsdireccion().trim());
		}
		
		if(entity.getSmdstelefono() != null && !"".equals(entity.getSmdstelefono().trim())){
			query.setParameter("sm_dstelefono1", entity.getSmdstelefono().trim());
		}
		
		if(entity.getSmdscelular()!= null && !"".equals(entity.getSmdscelular().trim())) {
			query.setParameter("sm_dscelular", entity.getSmdscelular().trim());
		}
		
		if(entity.getSmdsemail()!= null && !"".equals(entity.getSmdsemail().trim())) {
			query.setParameter("sm_dsemail", entity.getSmdsemail().trim());
		}
		
		if(entity.getSmdsprofesion()!= null && !"".equals(entity.getSmdsprofesion().trim())) {
			query.setParameter("sm_dsprofesion", entity.getSmdsprofesion().trim());
		}
		
		if(entity.getSmdsempresatrabaja()!= null && !"".equals(entity.getSmdsempresatrabaja().trim())) {
			query.setParameter("sm_dsempresatrabaja", entity.getSmdsempresatrabaja().trim());
		}
		
		if(entity.getSmdsbarrio()!= null && !"".equals(entity.getSmdsbarrio().trim())) {
			query.setParameter("sm_dsbarrio", entity.getSmdsbarrio().trim());
		}
		
		return query.getResultList();
	}
}
